package com.wtgroup.demo.mianshi.线程;

/**
 * 双重检查锁定单例
 */
public class DCSafeSingleton
{
    static volatile DCSafeSingleton obj;

    static DCSafeSingleton getObj() {
        if (obj == null) { // 当发生指令重排序时，可能判断非null，但实际实例还为初始化好
            synchronized (DCSafeSingleton.class) {
                if (obj == null) {
                    obj = new DCSafeSingleton();
                    // 1. 分配内存
                    // 2. 初始化实例
                    // 3. 变量引用指向内存
                }
            }
        }

        return obj;
    }

    public static void main(String[] args) {
        DCSafeSingleton obj1 = DCSafeSingleton.getObj();
        System.out.println(obj1);
    }


}